#ifndef OCL_DL_H
#define OCL_DL_H

#ifdef __APPLE__
	#include <OpenCL/opencl.h>
#endif

#ifdef _WIN32
	#include <CL/cl.h>
	#include <windows.h>
#endif

#include "ocl_defs.h"

extern t_clGetPlatformIDs           oclGetPlatformIDs;
extern t_clGetPlatformInfo          oclGetPlatformInfo;
extern t_clGetDeviceIDs             oclGetDeviceIDs;
extern t_clGetDeviceInfo            oclGetDeviceInfo;
extern t_clCreateContext            oclCreateContext;
extern t_clReleaseContext           oclReleaseContext;
extern t_clCreateCommandQueue       oclCreateCommandQueue;
extern t_clReleaseCommandQueue      oclReleaseCommandQueue;

extern t_clRetainKernel             oclRetainKernel;
extern t_clReleaseKernel            oclReleaseKernel;
extern t_clSetKernelArg             oclSetKernelArg;
extern t_clEnqueueNDRangeKernel     oclEnqueueNDRangeKernel;
extern t_clCreateProgramWithSource  oclCreateProgramWithSource;
extern t_clBuildProgram             oclBuildProgram;
extern t_clGetProgramBuildInfo      oclGetProgramBuildInfo;
extern t_clCreateKernelsInProgram   oclCreateKernelsInProgram;
extern t_clGetKernelInfo            oclGetKernelInfo;
extern t_clGetKernelWorkGroupInfo   oclGetKernelWorkGroupInfo;
extern t_clReleaseProgram           oclReleaseProgram;
extern t_clCreateBuffer             oclCreateBuffer;
extern t_clEnqueueReadBuffer        oclEnqueueReadBuffer;
extern t_clEnqueueMapBuffer         oclEnqueueMapBuffer;
extern t_clEnqueueUnmapMemObject    oclEnqueueUnmapMemObject;
extern t_clCreateImage2D            oclCreateImage2D;
extern t_clEnqueueReadImage         oclEnqueueReadImage;
extern t_clEnqueueMapImage          oclEnqueueMapImage;
extern t_clRetainMemObject          oclRetainMemObject;
extern t_clReleaseMemObject         oclReleaseMemObject;
extern t_clWaitForEvents            oclWaitForEvents;
extern t_clGetEventProfilingInfo    oclGetEventProfilingInfo;
extern t_clReleaseEvent             oclReleaseEvent;

class oclLoader
{
public:
    oclLoader();
    ~oclLoader();

    void* m_dll;
};

#endif